{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "78c98603",
   "metadata": {},
   "source": [
    "# Numpy"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cbd99a38",
   "metadata": {},
   "source": [
    "## 创建"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8a158dc9",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[80, 89, 86, 67, 79],\n",
       "       [78, 97, 89, 67, 81],\n",
       "       [90, 94, 78, 67, 74],\n",
       "       [91, 91, 90, 67, 69],\n",
       "       [76, 87, 75, 67, 86],\n",
       "       [70, 79, 84, 67, 84],\n",
       "       [94, 92, 93, 67, 64],\n",
       "       [86, 85, 83, 67, 80]])"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "# 创建ndarray\n",
    "score = np.array(\n",
    "[[80, 89, 86, 67, 79],\n",
    "[78, 97, 89, 67, 81],\n",
    "[90, 94, 78, 67, 74],\n",
    "[91, 91, 90, 67, 69],\n",
    "[76, 87, 75, 67, 86],\n",
    "[70, 79, 84, 67, 84],\n",
    "[94, 92, 93, 67, 64],\n",
    "[86, 85, 83, 67, 80]])\n",
    "\n",
    "score"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62631eec",
   "metadata": {},
   "source": [
    "## 效率对比"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5ccf9f74",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: total: 891 ms\n",
      "Wall time: 7.81 s\n",
      "CPU times: total: 78.1 ms\n",
      "Wall time: 1.37 s\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "import time\n",
    "import numpy as np\n",
    "a = []\n",
    "for i in range(100000000):\n",
    "    a.append(random.random())\n",
    "\n",
    "# 通过%time魔法方法, 查看当前行的代码运行一次所花费的时间\n",
    "%time sum1=sum(a)\n",
    "\n",
    "b=np.array(a)\n",
    "\n",
    "%time sum2=np.sum(b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "2a387cde",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "999b9baf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 1., 1., 1., 1., 1., 1., 1.],\n",
       "       [1., 1., 1., 1., 1., 1., 1., 1.],\n",
       "       [1., 1., 1., 1., 1., 1., 1., 1.],\n",
       "       [1., 1., 1., 1., 1., 1., 1., 1.]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成0和1数组\n",
    "\n",
    "ones = np.ones([4, 8])\n",
    "ones"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "de958d60",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0., 0., 0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 0., 0., 0., 0.]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.zeros_like(ones)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "dec01f8f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  0.,  10.,  20.,  30.,  40.,  50.,  60.,  70.,  80.,  90., 100.])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成固定范围数组\n",
    "np.linspace(0, 100, 11)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "87b01446",
   "metadata": {},
   "source": [
    "## 生成随机数组"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5c274de9",
   "metadata": {},
   "source": [
    "### 正态分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "315a998f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.49587564])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 返回单个数据\n",
    "np.random.randn()\n",
    "\n",
    "# 返回 一维数组\n",
    "np.random.randn(1)\n",
    "\n",
    "# 返回二维数组\n",
    "# np.random.randn(2, 4)\n",
    "\n",
    "# 返回三维数组\n",
    "# np.random.randn(3, 3, 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "c86cd4e1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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UqkMuG3dunWpVCpZv379gNsAAAAAgNrROpgHjx07NjfeeGOS92Ljt771rXzxi1/Miy++mDPPPLP/cZMmTUqSbNu2LW+++WYmT5580LY9e/akt7d3wG3btm1Lb29vdu/ePeC2gezatSu7du3q/3znzp2DeVoAAAAAQKGiu0jv2bMnV1xxRT70oQ/l9ttvT/LeTVn22//vLS0tg962/+tH2nagO++8M21tbf0fM2bMKHlaAAAAAMAgDTow7tu3L1/4wheyefPmPProoxkzZkxOPvnkbN++vf8xvb29SZKpU6cOuO24447LxIkTB9w2derUTJo0Kccff/yA2wayePHi9PX19X9s2bJlsE8LAGhyrsEGAABlBh0Yb7755vzyl7/M448/ngkTJiRJZs+enaeeeqr/MU8//XTa29tzyimnDLht1qxZaWlpGXBbR0dHWlpaMmvWrAG3DWT06NEZP378QR8AAAAAwPAbVGB87bXXsmzZstx9992pVCrZsWNHduzYkblz52br1q25++67s3nz5ixdujTz589Pklx55ZVZs2ZNHn744WzatCkrVqzo33bVVVdl1apVWbt2bTZs2JBVq1YdtG358uV57rnn0tPTk8cffzzz5s0b4qcPAADwHpPMAFBmUDd5WbNmTd55552D7u6cJK+++moeeOCBdHZ2ZtGiRbn00kuzePHiJMnMmTNzzz33pLOzM319ffnSl76Ua665JkkyZ86c3HLLLbnsssuyb9++3HjjjbnwwguTJFdffXWef/75dHR05IQTTsjy5ctz2mmnDcVzBgAAAACGSEvlwDupNIidO3emra0tfX19TpcGAI7I1BKw3+a7Lq72EgCgJgymrxXdRRoAAAAAIBEYAQAAAIBjIDACAAAAAMUGdZMXAIBG4tqLAABw7EwwAgBNSVwEAIChITACAAAAAMUERgAAgP/T3tVtwhkABklgBAAAAACKCYwAAAAAQDGBEQAA4H2cJg0AR09gBAAAAACKCYwAQNMxmQQAAENHYAQAABiANyMA4OgIjAAAAABAMYERAAAAACgmMAIATcUpjwAAMLQERgAAAACgmMAIAAAAABQTGAGApuH0aGCw2ru6/ewAgCMQGAEAAACAYgIjAAAAAFBMYAQAAAAAigmMAEBTcA01AAAYHgIjAAAAAFBMYAQAAAAAigmMAAAAR+AyCwDwwQRGAAAAAKCYwAgANDyTR8BQ8LMEAAYmMAIADam9q1sMAACAESAwAgAAAADFBEYAoKGZYgQAgOElMAIADUdUBIaLny8AcCiBEQAAAAAoJjACAAAAAMUERgAAgEFwmjQAHExgBAAAAACKCYwAAACDZIoRAP6fwAgAAAAAFBMYAQAAAIBiAiMAAEABp0kDwHsERgCgoTjgBwCAkSUwAgAAAADFBEYAAIBCpqYBQGAEABqIA30AABh5AiMAAAAAUExgBAAAOAbtXd0mqAFoagIjANAQHNwDAEB1CIwAAAAAQDGBEQCoayYXAQCgugRGAKDuiYwAAFA9AiMAAMAQ8GYHAM1KYAQAAAAAigmMAAAAAEAxgREAAAAAKCYwAgAADBHXYQSgGQmMAAAAAEAxgREAqDsmhAAAoHYIjABAXWrv6hYagZrkZxMAzUZgBAAAGGIiIwDNRGAEAAAAAIoJjAAAAABAMYERAAAAACgmMAIAdcV1zQAAoLYIjAAAAMPAGyIANAuBEQCoGw7WAQCg9giMAAAAAEAxgREAAGCYtHd1m74GoOEJjAAAAABAMYERAKgLJoAAAKA2CYwAAAAAQDGBEQCoeaYXAQCgdgmMAAAAAEAxgREAAAAAKCYwAgAADLP2rm6XewCgYQmMAAAAAEAxgREAAAAAKCYwAgAAAADFBEYAAIAR4lqMADQigREAqGkOxAEAoLYJjABAzTHhAwAA9UNgBABqlsgINCo/3wBoJAIjAAAAAFBMYAQAAAAAigmMAAAAAEAxgREAAKAKXIcRgEbRWu0FAADs52AbAADqjwlGAACAKvLmCgD1TmAEAAAAAIoJjAAAAABAMYERAKgJThEEAID6JDACAABUiTdXAGgEAiMAAAAAUExgBACqzgQP0Oz8HASgngmMAEBVOagGAID6JjACAAAAAMUERgAAgBrQ3tVtqhuAuiQwAgAAAADFBEYAAAAAoJjACAAAAAAUExgBAAAAgGKt1V4AANCc3MgAAAAagwlGAACAGuJu0gDUGxOMAMCIctAMAACNxQQjAABADfKGDAD1QmAEAAAAAIoJjAAAAABAMYERABgxTvcDGDw/OwGodQIjAABAjRIXAagHAiMAAAAAUExgBAAAAACKCYwAAAAAQLHWai8AAGh8riEGAACNywQjAABAjfNGDQC1TGAEAAAAAIoJjADAsDJ1AzA02ru6/UwFoCYJjAAAAABAMYERABg2Jm0AAKDxCYwAAAAAQDGBEQAAoI6YDgeg1giMAMCwcAAMAADNoSgwbt26Neeff36effbZ/q/19PTk1FNPzdixYzNv3ry8/fbb/dtWrlyZGTNmZNy4cVm4cGH27t3bv23p0qWZMmVKJk6cmCVLlvR/vVKpZNGiRWlra8u0adPy/e9/v2SpAAAADcebOADUkkEHxuuuuy7Tpk3Lk08+2f+1HTt25PLLL88NN9yQF154IZs3b84dd9yRJHn55Zdz7bXXZvny5dmwYUMeeeSR3HvvvUmSJ554IkuWLMmDDz6Ynp6eLFu2LI899liS5L777svq1auzdu3a/OAHP8j111+fTZs2DcVzBgAAAACGyKAD4x133JFXX331oK899NBDmT59ehYsWJD29vbcdNNNuf/++5Mkq1atygUXXJC5c+fm9NNPT2dnZ1auXJnkvYg4f/78dHR05Jxzzsn8+fMP2rZw4cKceeaZueiii/LpT386P/zhD4/1+QIAI8BkDcDw87MWgFox6MA4efLktLe3H/S1devW5bzzzuv//Nxzz83rr7+eLVu2DLht/fr1qVQqA25bt25dKpVK1q9fP+C2gezatSs7d+486AMAGHntXd0OeAEAoMkMyU1e3nzzzUyePLn/80mTJiVJtm3bNuC2PXv2pLe3d8Bt27ZtS29vb3bv3j3gtoHceeedaWtr6/+YMWPGUDwtAAAAAOAIhuwu0pVK5ZB/b2lpGfS2/V8/0rYDLV68OH19ff0fW7ZsOdanAwAAAAAchSEJjCeffHK2b9/e/3lvb2+SZOrUqQNuO+644zJx4sQBt02dOjWTJk3K8ccfP+C2gYwePTrjx48/6AMAAKDRuSwFALVgSALj7Nmz89RTT/V//vTTT6e9vT2nnHLKgNtmzZqVlpaWAbd1dHSkpaUls2bNGnAbAAAAAFA7hiQwzp07N1u3bs3dd9+dzZs3Z+nSpZk/f36S5Morr8yaNWvy8MMPZ9OmTVmxYkX/tquuuiqrVq3K2rVrs2HDhqxateqgbcuXL89zzz2Xnp6ePP7445k3b95QLBcAAKChmGQEoJpah+I/0tbWlgceeCCdnZ1ZtGhRLr300ixevDhJMnPmzNxzzz3p7OxMX19fvvSlL+Waa65JksyZMye33HJLLrvssuzbty833nhjLrzwwiTJ1Vdfneeffz4dHR054YQTsnz58px22mlDsVwAYBg4uAUAgObUUjnwTioNYufOnWlra0tfX5/rMQLACBEYAapr810XV3sJADSQwfS1IbuLNADQvMRFAABoXgIjAHBMxEUAAGhuAiMAAAAAUExgBAAAAACKDcldpAEAAKiuAy9Z4YYvAIwkgREAKOLaiwAAQOIUaQAAAADgGAiMAAAAAEAxgREAAKDBuIwFACNJYAQAAAAAigmMAMCgmYwBAAD2ExgBgKPS3tUtLALUET+3ARgpAiMAMCgOVgEAgAMJjAAAAABAMYERADgiU4sAAMAHERgBAAAamDeJABhuAiMAAECDExkBGE4CIwBwWA5KARqDn+cADBeBEQAAAAAoJjACAB/ItAsAAHAkAiMAAAAAUExgBAAGZHoRAAA4GgIjAABAk/DmEQDDQWAEAA7hABSgcbV3dfs5D8CQEhgBAAAAgGICIwAAQJMyyQjAUGit9gIAgNrhQBOgefiZD8BQMcEIAADQxIRGAI6VCUYAwMElAABQzAQjAAAAAFBMYAQAAGhyJtkBOBYCIwAAACIjAMUERgAAAACgmMAIAE3MtAoAAHCsBEYAaHIiIwD72ScAUEJgBAAAAACKCYwA0KRMqQAwEPsHAAZLYAQAAAAAigmMANCETKcAAABDRWAEAADgIO1d3d6MAuCoCYwA0GQcMAJwtOwzADgaAiMAAAAAUExgBIAmYhIFAAAYagIjADQJcRGAEvYfAByJwAgAAMBhiYwAHI7ACAAAAAAUExgBoMG1d3WbPAHgmNmXAPBBBEYAAACOisgIwEAERgAAAACgmMAIAA3MpAkAQ82+BYD3ExgBAAAAgGICIwA0IDd2AWA42ccAcCCBEQAajIM+AEaCN7MA2E9gBIAG4kAPgGqw/wFobgIjAAAAAFBMYASABmF6BIBqsP8BQGAEAAAAAIoJjABQ51xkH4BaYF8E0LwERgAAAACgmMAIAHXMtAgAtcR+CaA5CYwAUKccxAEAALVAYASAOiQuAlCr7KMAmo/ACAAAwJASGQGai8AIAAAAABQTGAGgTuyfBjEVAkA9sL8CaB4CIwAAAMOivatbaARoAgIjANQRB2kA1CP7L4DGJjACQB1wYAZAI7A/A2hMrdVeAADwwRyIAdAo7NMAGpcJRgCoUQ7EAACAeiAwAkANEhcBaFT2cQCNR2AEAAAAAIoJjAAAAIwoU4wAjUVgBIAa0t7V7aALgKZgfwfQOARGAKgRDrQAaDb2fQCNQWAEAACgakzvA9Q/gREAAICqExkB6ldrtRcAAM3OARUAAFDPTDACAABQE7zpBlCfBEYAAABqhsgIUH+cIg0AVeDgCQA+WHtXdzbfdXG1lwHAUTLBCAAjTFwEAAAaiQlGABghwiIAHL39+02TjAC1T2AEAACgZh34Bp3YCFCbnCINACPA9CIAANCoBEYAAAAAoJjACADDoL2ru39q0fQiAAwN+1SA2uQajAAwjBwIAcDQck1GgNpjghEAhpioCAAANBOBEQCGkLgIACPHfhegNgiMADBEHOQAwMiz/wWoPtdgBIBj5MAGAKrLdRkBqssEIwAAAABQTGAEgELtXd2mFwGgxtg3A4w8p0gDwCA5cAGA2rZ/X+10aYCRYYIRAAZBXAQAADiYwAgAR8Hp0ABQn+y/AYafU6QBAABoSPvjortMAwwvE4wAcBgmFwGgsdivAww9gREABiAsAkDjso8HGFpOkQaAAzjgAIDm4E7TAEPHBCMA/B9xEQCaj/0/wLEzwQhA03NgAQDNzTQjwLERGAEAACCHvukoOAIcHYERgKZx4HSCqUUA4Ejau7pFRoCj4BqMADS8998RWlwEAAbD7w4AhycwAtDQHBAAAMfCm5QARyYwAtCwHAQAAEPF7xUAH8w1GAFoOA4AAIDh4kYwAIcSGAFoCKIiAFANB95EDqBZOUUagLq0/5f599/ABQCgGt5/rUa/nwDNpKVSqVSqvYihtnPnzrS1taWvry/jx4+v9nIAGALvnw7wSzsAUC9MNwL1aDB9zQQjADXP3RsBgHrm9xeg0ZlgBKAm+UUcAGhEphmBejGYvuYmLwDUDFERAGh07kINNCKBEYCqERQBgGYnOAKNQGAEYMQc+Au0X54BAA410Buwfm8Cap1rMAIwbEwoAgAMLbERGCmuwQjAiGrv6s7muy4WFAEAhtnhft8SH4FqMcEIwGEdGA/3/9IqKAIA1AfRESg1mL5W04Fx48aN+fKXv5yXXnops2fPzv33358pU6Yc8c8JjACDJxoCADQfARL4IA0RGPft25ePfexj+cu//MssWLAgnZ2d+fCHP5xVq1Yd8c8KjAAHEw0BADgWQiQ0n4YIjE888UQuu+yy9Pb2prW1NRs3bkxHR0e2b9+esWPHHvbPCoxAoxloutC0IQAAtWygKLn/91fBEmpfQwTGJUuW5Gc/+1kee+yxJO9NNI4ZMyb/+q//mtmzZx/02F27dmXXrl39n/f19eUjH/lItmzZIjACw+6Pb+2p9hIAAKBpPH/bRdVeAjSFnTt3ZsaMGdmxY0fa2toO+9iavYv0m2++mcmTJ/d/PmrUqEyYMCHbtm075LF33nlnbrvttkO+PmPGjGFdIwAAADCy2v6h2iuA5vK73/2ufgNjkrx/uLJSqaSlpeWQxy1evDg33HBD/+f79u3Lb3/720yaNGnAx0Mt2/8OgQlc+GBeJ3BkXidwZF4ncGReJ3B4jfwaqVQq+d3vfpdp06Yd8bE1GxhPPvnkvPjii/2f7927Nzt27MjUqVMPeezo0aMzevTog7524oknDvcSYViNHz++4X44wVDzOoEj8zqBI/M6gSPzOoHDa9TXyJEmF/cbNczrKDZ79uxs2LAhe/bsSZI888wzaW1tzdlnn13llQEAAAAA+9VsYOzo6MhJJ52UW2+9NW+88UZuv/32fO5zn8sJJ5xQ7aUBAAAAAP+nZgPjqFGjsnr16vzkJz/JzJkz884772TZsmXVXhYMu9GjR+fWW2895LR/4P95ncCReZ3AkXmdwJF5ncDheY28p6Xy/jupAAAAAAAcpZqdYAQAAAAAap/ACAAAAAAUExgBAAAAgGICIwAAAABQTGCEGvWrX/0q559/fsaNG5c5c+bktddeq/aSoCZs3LgxZ511VsaMGZPPfOYz+c1vflPtJUHNsQ+Bo/fkk0+mpaUla9asqfZSoObs3r071113XcaNG5czzjgjTz/9dLWXBDXlueeey6c+9amMGzcuF110UV5//fVqL6lqBEaoUddee20+8pGP5Pnnn8+kSZPS2dlZ7SVB1e3bty+f//znc8kll+SVV17JmDFj8rWvfa3ay4KaYx8CR2f37t35yle+Uu1lQM365je/mVdffTXPPPNM5s2bly9+8YvVXhLUlM9+9rO55JJL8tJLL6W9vT1f/vKXq72kqmmpVCqVai8CONi7776bP/iDP8jzzz+fj3/843nkkUdyxRVXpK+vr9pLg6p64oknctlll6W3tzetra3ZuHFjOjo6sn379owdO7bay4OaYB8CR+8b3/hGHn300WzcuDH/9E//lDlz5lR7SVBTZs6cmR//+Mc566yz8vvf/z6PPvpoPve5z2XUKLNKsH379kyZMiVbt27N1KlTs379+vzZn/1Z3nrrrWovrSr8VIAatHv37nzjG9/IRz/60SRJb29vxowZU+VVQfWtW7cun/zkJ9Pa2pokOeuss7J3795s3LixyiuD2mEfAkfnjTfeyF133ZXvfOc71V4K1KQ333wzr776ap588sm0tbXl/PPPz5/+6Z+Ki/B/JkyYkOnTp6enpydJ0tPTk7POOqu6i6oiPxmgiq6++uqceOKJh3x8+9vfzo033pgxY8Zk9+7d+da3vuV0BMh7v+hOnjy5//NRo0ZlwoQJ2bZtWxVXBbVl7Nix9iFwFL761a/muuuuyxlnnFHtpUBN2rp1a1paWvJv//Zv+Y//+I+cccYZWbBgQbWXBTWjtbU1DzzwQK677rqMHj063/72t/OP//iP1V5W1bRWewHQzL75zW/mtttuO+TrJ554YpJkz549ueKKK/KhD30ot99++wivDmrT+6/sUalU0tLSUqXVQO2yD4EP9uijj+YXv/hFVq5cWe2lQM166623snfv3tx6661pb2/P9ddfn/POOy/vvvtujj/++GovD6ruf/7nf3LVVVfltttuyyWXXJLvfve7+fKXv5yf/exn1V5aVQiMUEUnnXRSTjrppAG37du3L1/4whfy2muv5bHHHnN6GyQ5+eST8+KLL/Z/vnfv3uzYsSNTp06t4qqg9tiHwOH96Ec/ytatWzNt2rQkSV9fX//B4ZVXXlnl1UFtaGtrS5JMnDgxSTJp0qRUKpX89re/9bsXJPmXf/mXvPvuu/n617+eJFm6dGnGjh2b//zP/8yf/MmfVHl1I88p0lCjbr755vzyl7/M448/ngkTJlR7OVATZs+enQ0bNmTPnj1JkmeeeSatra05++yzq7wyqC32IXB4S5cuzUsvvZRnn302zz77bMaNG5fvfe97ufTSS6u9NKgZM2fOzHHHHZeXX345SbJt27aMGjXqoMvVQDP70Ic+lL179/Z/XqlUsm/fvv7rxTcbd5GGGvTaa6/l9NNPz09/+tODrgs0fvx4F1Wmqe3bty9/9Ed/lHnz5uWv//qv85WvfCVtbW1OcYMD2IfA4J144onuIg0D+PM///P8/ve/z4oVK/L1r389b731Vh555JFqLwtqwvbt2/Oxj30st912W/7iL/4i//AP/5Af//jHeeWVV3LcccdVe3kjzm+ZUIPWrFmTd955J+edd14mTJjQ//H6669Xe2lQVaNGjcrq1avzk5/8JDNnzsw777yTZcuWVXtZUFPsQwAYKitWrMjevXvzx3/8x9m6dWtWrFhR7SVBzTjppJOyevXq3HvvvTnttNOydu3aPPjgg00ZFxMTjAAAAADAMTDBCAAAAAAUExgBAAAAgGICIwAAAABQTGAEAAAAAIoJjAAAAABAMYERAAAAACgmMAIAAAAAxQRGAAAAAKCYwAgAAAAAFBMYAQAAAIBi/wuhGXzV7Z2fDwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1600x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 生成均值为 2.75， 标准差为 1 的正态分布数据，10000000 个\n",
    "x1 = np.random.normal(2.75, 1, 10000000)\n",
    "\n",
    "plt.figure(figsize=(16, 8), dpi = 100)\n",
    "\n",
    "plt.hist(x1, 1000)\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "08b31518",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5419515484337407"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.random.standard_normal()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "53052317",
   "metadata": {},
   "source": [
    "### 均匀分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b18fc9d6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.00029823])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 返回单个数据 \n",
    "np.random.rand()\n",
    "\n",
    "# 返回 一维数组\n",
    "np.random.rand(1)\n",
    "\n",
    "# 返回二维数组\n",
    "# np.random.rand(3, 3)\n",
    "\n",
    "# 返回三维数组\n",
    "# np.random.rand(3, 4, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "4a93dd03",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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0J//+Z/H1VdfHc8991x0dXXFRz/60Th27Fhcc801cfXVV8fzzz8f48ePj0996lMREXH48OG49tpr49Zbb42nn346uru746677qrVcAAAAE5SkwA6ePBg/PznP4+PfexjMWvWrLjhhhti+/bt8cMf/jB+9atfxRe+8IWYM2dOrFq1Kh5++OF45ZVX4uGHH445c+bEzTffHF1dXXH77bfHhg0bajEcAACAQdUkgKZMmRJz5syJzZs3R8SbH22bP39+bN26Nd73vvfF2LFjIyJi/vz50d/fH7t27YqtW7fGwoULK/exYMGC2Lt3b/T09NRiSAAAACepSQCNHTs2Hnzwwbjpppuivb09/uEf/iH+9V//Nfbv3x/Tp0///w82ZkxMmTIlDhw4cNKyadOmRUTEgQMHBn2MI0eORF9f34ALAADAcNQkgP73f/83PvKRj8QXv/jF2LVrVyxbtiw++tGPRkREURQDblsURbS1tZ207Pi/jy97q9WrV0dHR0fl0tnZWYuhAwAAidQkgL773e/G66+/Hp/+9Kfjt3/7t2PNmjWxbdu2OPfcc+PgwYOV2/X398fhw4djxowZMXPmzAHLDh06FBERM2bMGPQxVq5cGb29vZWLj8oBAADDVZMAOuuss6K/v79yvSiKOHbsWPzRH/1R7Ny5M44ePRoREU899VSMHTs23vve98aiRYti27Ztle/ZsWNHdHV1xezZswd9jPb29pg0adKACwAAwHDUJIAWLFgQfX198bWvfS1efPHF+OxnPxudnZ2xYMGCOPfcc2PVqlXx4osvxh133BEf+tCH4pxzzoklS5bEvn374r777ovu7u5Ys2ZNLFu2rBbDAQAAGFRNAujcc8+Nhx56KB544IH4rd/6rXjiiSfiW9/6VrS3t8dDDz0U3/72t2PevHnx2muvxdq1ayMioqOjIx588MFYu3ZtXHTRRTF37txYuXJlLYYDAAAwqLbirWcpaBJ9fX3R0dERvb29pfg4XNdnHm30EAAAYFR137240UOIiOG1QU3eAQIAAGgGAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaNQ2gN954I2666aaYOHFiXHjhhbFjx46IiNi8eXOcf/75MWHChFi6dGm8+uqrle9Zv359dHZ2xsSJE+OWW26J/v7+Wg4JAACgoqYB9JWvfCX27NkTTz31VCxdujSuv/76OHz4cFx77bVx6623xtNPPx3d3d1x1113RUTE7t27Y/ny5XHvvffGzp07Y9OmTfHAAw/UckgAAAAVNQ2gf/7nf44vf/nLMW/evPjrv/7rWL16dfzbv/1bzJkzJ26++ebo6uqK22+/PTZs2BARERs3bowrrrgilixZEhdccEGsWLEi1q9fX8shAQAAVNQsgPbv3x979uyJxx9/PDo6OuKyyy6L3/3d343t27fHwoULK7dbsGBB7N27N3p6emLr1q0nLdu+fXsURXHS/R85ciT6+voGXAAAAIajZgG0b9++aGtrix//+Mfx05/+NC688MK4+eabY//+/TF9+vTK7aZNmxYREQcOHBh02dGjR+PQoUMn3f/q1aujo6Ojcuns7KzV0AEAgCRqFkCvvPJK9Pf3x6pVq6Krqys+8YlPxGOPPRbHjh0b8I7O8X+3tbUNuD7YshOtXLkyent7K5eenp5aDR0AAEhibK3uqKOjIyIipk6dGhFvvptTFEXMnj07Dh48WLnd8Xd3ZsyYETNnzjxp2bhx4yr3caL29vZob2+v1XABAICEavYO0Lx582LcuHGxe/fuiHjzI25jxoyJRYsWxbZt2yq327FjR3R1dcXs2bMHXXbJJZcM+g4QAADASNUsgMaPHx8f/OAH44477ohf/OIXcc8998RVV10VS5YsiX379sV9990X3d3dsWbNmli2bFlERFx33XWxZcuWeOSRR+LZZ5+NdevWVZYBAADUWk1Pg71u3bro7++P3/md34l9+/bFunXroqOjIx588MFYu3ZtXHTRRTF37txYuXJlRLz5rtH9998fK1asiIsvvjgWL14cN954Yy2HBAAAUNFWDHbO6SbQ19cXHR0d0dvbG5MmTWr0cKLrM482eggAADCquu9e3OghRMTw2qCm7wABAACUmQACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQRs0D6PHHH4+2trbYsmVLRERs3rw5zj///JgwYUIsXbo0Xn311cpt169fH52dnTFx4sS45ZZbor+/v9bDAQAAqKhpAL3xxhvx8Y9/vHL98OHDce2118att94aTz/9dHR3d8ddd90VERG7d++O5cuXx7333hs7d+6MTZs2xQMPPFDL4QAAAAxQ0wD62te+Fuedd150dHRERMTDDz8cc+bMiZtvvjm6urri9ttvjw0bNkRExMaNG+OKK66IJUuWxAUXXBArVqyI9evX13I4AAAAA9QsgF588cW4++674x//8R8rX9u6dWssXLiwcn3BggWxd+/e6OnpGXTZ9u3boyiKQe//yJEj0dfXN+ACAAAwHDULoE9+8pNx0003xYUXXlj52v79+2P69OmV69OmTYuIiAMHDgy67OjRo3Ho0KFB73/16tXR0dFRuXR2dtZq6AAAQBI1CaDvfOc78eSTT8bnPve5k5ad+I7O8X+3tbWdcdlbrVy5Mnp7eyuXnp6eWgwdAABIZGwt7uSb3/xm7Nu3L2bNmhUREb29vXH11VfHzJkz4+1vf3vldsff3ZkxY0bMnDkzDh48OGDZuHHjYurUqYM+Rnt7e7S3t9diuAAAQFI1CaA1a9bEqlWrKtff8573xNe//vV4/fXXY/Xq1ZWv79ixI7q6umL27NmxaNGi2LZt24Bll1xyySnfAQIAABipmnwEbvr06dHV1VW5jBkzJmbMmBFLliyJffv2xX333Rfd3d2xZs2aWLZsWUREXHfddbFly5Z45JFH4tlnn41169ZVlgEAANRDzf8j1BN1dHTEgw8+GGvXro2LLroo5s6dGytXroyIiHnz5sX9998fK1asiIsvvjgWL14cN954Yz2HAwAAJNdWnOq80yXX19cXHR0d0dvbG5MmTWr0cKLrM482eggAADCquu9e3OghRMTw2qCu7wABAACUiQACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANAQQAACQhgACAADSEEAAAEAaAggAAEhDAAEAAGkIIAAAIA0BBAAApCGAAACANGoWQL/4xS/isssui4kTJ8bll18eL7zwQkREbN68Oc4///yYMGFCLF26NF599dXK96xfvz46Oztj4sSJccstt0R/f3+thgMAAHCSmgXQ8uXL4x3veEf813/9V0ybNi1WrFgRhw8fjmuvvTZuvfXWePrpp6O7uzvuuuuuiIjYvXt3LF++PO69997YuXNnbNq0KR544IFaDQcAAOAkNQmg119/PX7wgx/EypUr453vfGd87GMfix/96Efx8MMPx5w5c+Lmm2+Orq6u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ZQcOHBjxOpTZqeb3C1/4woC5GDNmTEyZMmVY8/Hoo4/G7/3e78Xb3/72ytd6enriq1/9amzbti02bdoU//Iv/1LT9SmbeszvgQMHYsWKFfGzn/0s/vu//7uyL5xu225VtZ7fCy64oPI58xdeeCEeeuihuP766yvLs22/J3rr9jWUOXW8Hbpq5tf2OnTVzG+E4+1QVTu/x3m9UB/NeAwe2+gBlMVXvvKV+OIXv3jS1ydPnlz1fZ74G5rj/25raxt02fGvt6pTze9XvvKV+J//+Z8BXxvufGzatCk+8IEPVK7/wR/8Qezevbuyw33oQx+Kxx57LG666aYqR19+tZ7fOXPmxAsvvBAzZsyIiDcD4Fvf+taA+3jrv1t5G67X9rtv37646qqr4oYbbojFixdHRM7t963e+tvtocyp4+3QVTO/EbbXoRru/DreDk+122+E1wv11GzHYAH0/5x77rlx7rnn1uz+Zs6cGQcPHqxcP3ToUIwbNy6mTp066LLjB75Wdar5nTlzZjzzzDOV6/39/XH48OEhz8crr7wSjz/++IAXp2effXacffbZleuTJ0+O7u7u6gffBGo9v2PHjh1wm8mTJ0dfX1/lPk+1bbeqemy/L730Ulx++eWxaNGiuOeeeypfz7j9nqiaOXW8Hbpqt1nb69BUM7+Ot0M3kmOu1wv104zHYB+Bq5NFixbFtm3bKtd37NgRl1xySbS1tQ267NJLL23EMBtu0aJFsXPnzjh69GhERDz11FMxduzYeO973zuk7//+978fb3vb22LBggWVry1dunTAaRb37t077L/hahXVzu+nP/3p+Ku/+qvK9RPn8HTbdjbVzu+xY8fimmuuiUsuuSTuv//+AXOXffutZk4db4eumvm1vQ5dNfPreDt0I3nN4PVC/TTlMbj+51loHTHI2TB+/etfF0ePHj3pts8///yAUwLOnTu3+Kd/+qeiKN4868jEiRMrpwScPHly8f3vf380VqF0+vv7i3e9613F3/7t3xY9PT3Fn/7pnxbLli2rLD/V/B63fPny4sMf/vCAr61bt67o6uoqfvrTnxY/+MEPire97W3Fj3/847qtQ5lVO7+bNm0qJk+eXDzxxBPFk08+WcyaNav45je/WRTF6bftbKqd3w0bNhTveMc7in379lVOvdrb21sUhe33dHPqeDty1cyv7XXoqplfx9uhq2Z+j/N6Yfje+rq3lY7BAmgYBgugwb523Pr164vZs2cXb3vb24pPfOITRX9/f2XZmjVrimnTphVTpkwp7rzzzjqOuvyefPLJ4j3veU/R3t5e/PEf/3Hx0ksvVZadbn6Loig6OzuL9evXD/ja0aNHi09+8pPF1KlTi7lz5xYPPPBAvYbeFKqd3y996UvF29/+9mLWrFnFl770pQHLTrdtZ1PN/N5www2V/2Ph+OWd73xnURS236I49Zw63tbGcOfX9jo81Wy/jrdDV838FoXXC9V465y20jG4rSiSnksRAABIx98AAQAAaQggAAAgDQEEAACkIYAAAIA0BBAAAJCGAAIAANIQQAAAQBoCCAAASEMAAQAAaQggAAAgjf8LFb2RkcVtZjIAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 生成均匀分布的随机数\n",
    "x2 = np.random.uniform(low = -1, high = 1.0, size = 1000000)\n",
    "\n",
    "plt.figure(figsize = (10, 10), dpi = 100)\n",
    "\n",
    "plt.hist(x = x2, bins = 1000)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "90428197",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[31.86890296, 61.64071922, 18.94291259, 99.10272266],\n",
       "       [99.97563333, 44.34378512, 63.90086869, 87.34285019]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a =   np.random.uniform(10, 100, (2, 4))\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "49c453b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[31.86890296, 61.64071922, 18.94291259, 99.10272266]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# [0 : 1] == [0]\n",
    "a[0 : 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "818e3e57",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[31.86890296, 61.64071922, 18.94291259, 99.10272266],\n",
       "       [99.97563333, 44.34378512, 63.90086869, 87.34285019]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[0 : 2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "be14a055",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([61.64071922, 18.94291259])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[0, 1 : 3]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "14ebed65",
   "metadata": {},
   "source": [
    "## 形状修改"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "9658898d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2.8822825 , 3.16560343, 2.52768344, 1.95827724, 3.31006653,\n",
       "       4.25045383, 2.18218632, 2.75516   , 1.64506893, 1.59227329])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i = np.random.normal(2.75, 1, 10)\n",
    "i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "7ef5cbf0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[2.8822825 , 3.16560343],\n",
       "       [2.52768344, 1.95827724],\n",
       "       [3.31006653, 4.25045383],\n",
       "       [2.18218632, 2.75516   ],\n",
       "       [1.64506893, 1.59227329]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 修改成 5 行，2 列\n",
    "i.reshape([5, 2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "a9268e08",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[2.8822825 , 3.16560343],\n",
       "       [2.52768344, 1.95827724],\n",
       "       [3.31006653, 4.25045383],\n",
       "       [2.18218632, 2.75516   ],\n",
       "       [1.64506893, 1.59227329]])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i.resize([5,2])\n",
    "i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "1adc78f6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[2.8822825 , 2.52768344, 3.31006653, 2.18218632, 1.64506893],\n",
       "       [3.16560343, 1.95827724, 4.25045383, 2.75516   , 1.59227329]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i.T"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9ce5277b",
   "metadata": {},
   "source": [
    "## 类型修改"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "8d2045f4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[31.86890296, 61.64071922, 18.94291259, 99.10272266],\n",
       "       [99.97563333, 44.34378512, 63.90086869, 87.34285019]])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "8e35024a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[31, 61, 18, 99],\n",
       "       [99, 44, 63, 87]], dtype=int32)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.astype(np.int32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "e1b1f695",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr = np.array([[1, 2, 3], [4, 5, 6]])\n",
    "arr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "e16cde2a",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\fkc\\AppData\\Local\\Temp\\ipykernel_14792\\2127459365.py:1: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.\n",
      "  arr.tostring()\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "b'\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x06\\x00\\x00\\x00\\x00\\x00\\x00\\x00'"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr.tostring()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "29a3f9b2",
   "metadata": {},
   "source": [
    "## 数组去重"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "ef58b834",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4, 5, 6])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "temp =  np.array([[1, 2 , 3, 4], [3, 4, 5, 6]])\n",
    "np.unique(temp)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e85ad7ba",
   "metadata": {},
   "source": [
    "# Ndarray 运算"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5a9df938",
   "metadata": {},
   "source": [
    "## 逻辑运算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "4bc3ccac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False,  True, False,  True,  True],\n",
       "       [ True,  True,  True,  True,  True],\n",
       "       [False, False,  True,  True, False],\n",
       "       [ True,  True,  True, False, False]])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成10名同学，5门功课的数据\n",
    "score = np.random.randint(40, 100, (10, 5))\n",
    "\n",
    "# 取出最后4名同学的成绩，用于逻辑判断\n",
    "test_score = score[6:, 0:5]\n",
    "\n",
    "# 逻辑判断, 如果成绩大于60就标记为True 否则为False\n",
    "test_score > 60"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "7e13f914",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[42,  1, 42,  1,  1],\n",
       "       [ 1,  1,  1,  1,  1],\n",
       "       [42, 46,  1,  1, 58],\n",
       "       [ 1,  1,  1, 45, 50]], dtype=int32)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# BOOL赋值, 将满足条件的设置为指定的值-布尔索引\n",
    "test_score[test_score > 60] = 1\n",
    "test_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "035a3ac9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a1519066",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
